home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-06-21 | 4.0 KB | 146 lines | [TEXT/SPM ] |
- #define OLDROUTINELOCATIONS 0
- #include <ConditionalMacros.h>
- #include <TextUtils.h> // For c2pstr
- #include <PLStringFuncs.h> // For PLstrcpy
-
- #include <assert.h>
- #include <iostream.h>
- #include <stl.h>
-
- // This is the Symantec C++ 8.1 way to instantiate templates. Don't forget the ';' on the end of the line
- template class vector<char>;
- // template class rb_tree<macString,pair<const macString,macString>,select1st<pair<const macString,macString>,macString>,less<macString>>;
- template void uninitialized_fill_n(char *,unsigned int,const char&);
- template char *uninitialized_copy(char *,char *,char *);
- template char *copy_backward(char *,char *,char *);
- template char *copy(const char *,const char *,char *);
- template char *uninitialized_copy(const char *,const char *,char *);
- template void fill_all(char *,char *,const char&);
- template void __distance(rb_tree<macString,pair<const macString,macString>,select1st<pair<const macString,macString>,macString>,less<macString>>::const_iterator,rb_tree<macString,pair<const macString,macString>,select1st<pair<const macString,macString>,macString>,less<macString>>::const_iterator,unsigned int&,bidirectional_iterator_tag);
- template void __distance(rb_tree<macString,pair<const macString,macString>,select1st<pair<const macString,macString>,macString>,less<macString>>::iterator,rb_tree<macString,pair<const macString,macString>,select1st<pair<const macString,macString>,macString>,less<macString>>::iterator,unsigned int&,bidirectional_iterator_tag);
- template char *copy(char *,char *,char *);
- template insert_iterator<vector<char>> copy(const char *,const char *,insert_iterator<vector<char>>);
- template insert_iterator<vector<char>> copy(char *,char *,insert_iterator<vector<char>>);
-
- #include "macString.h"
-
- #define VERBOSE 0
-
- macString::macString(
- const macString& ms)
- : bCStrOK(true), bPStrOK(false), s(256)
- {
- macString &msIn = (macString)ms;
- msIn.synchronize();
- s = ms.s;
- synchronize();
- }
-
- macString::macString(
- const char *sIn)
- : bCStrOK(true), bPStrOK(false), s(256)
- {
- s.reserve(strlen(sIn) + 1);
- strcpy(s.begin(), sIn);
- synchronize();
- }
-
- macString::macString(
- const unsigned char *sIn)
- : bCStrOK(false), bPStrOK(true), s(256)
- {
- PLstrcpy(str255, sIn);
- synchronize();
- }
-
- const char* macString::conststr() const
- {
- macString& ms = (macString)*this;
- ms.synchronize();
- return s.begin();
- }
-
- const unsigned char* macString::constpstr()
- {
- macString& ms = (macString)*this;
- ms.synchronize();
- return str255;
- }
-
- void macString::synchronize()
- {
- assert(bCStrOK || bPStrOK);
- assert(s.capacity() >= 256);
- if (!bCStrOK)
- {
- PLstrcpy((unsigned char *)s.begin(), str255);
- p2cstr((unsigned char *)s.begin());
- bCStrOK = true;
- }
- if (!bPStrOK)
- {
- strncpy((char *)str255, s.begin(), 255);
- c2pstr((char *)str255);
- bPStrOK = true;
- }
- }
-
- void macString::dump(void)
- {
- assert(bCStrOK || bPStrOK);
- assert(s.capacity() >= 256);
- cout << "in macString::dump" << endl;
- cout << " this = " << this << endl;
- cout << " s.capacity() = " << s.capacity() << endl;
- // cout << " s.begin() = " << (void *)s.begin() << endl;
- // cout << " s.end() = " << (void *)s.end() << endl;
- // cout << " s.size() = " << s.size() << endl;
- // cout << " s.end() - s.begin() = " << s.end() - s.begin() << endl;
- cout << " strlen(s.begin()) = " << strlen(s.begin()) << endl;
- cout << "-->" << *this << "<--" << endl;
- }
-
- macString& macString::operator+=(const macString &msc)
- {
- size_t len;
-
- synchronize();
- macString& ms = (macString)msc;
- ms.synchronize();
- len = strlen(s.begin()) + strlen(ms.s.begin()) + 1;
- s.reserve(len);
- strcat(s.begin(), ms.s.begin());
- bPStrOK = false;
- synchronize();
- return *this;
- }
-
- macString operator+ (
- macString& ms0,
- macString& ms1)
- {
- ms0.synchronize();
- ms1.synchronize();
- macString ms(ms0);
- ms += ms1;
- return ms;
- }
-
- char* macString::str()
- {
- synchronize();
- bCStrOK = false;
- return s.begin();
- }
-
- macString& macString::operator=(const macString &mscIn)
- {
- macString& msIn = (macString)mscIn;
- msIn.synchronize();
- s = msIn.s;
- bCStrOK = true;
- bPStrOK = false;
- synchronize();
- return *this;
- }
-